"""

我们要登录用户发送消息功能我们需要：
1. 先登录（获取token）
2.调用发送消息的接口
3.退出登录或者清理数据
"""

# 使用fixture来自动的管理：测试前帮我们准备，测试后帮我们收拾东西
import os

import pytest


# @pytest.fixture   # 告诉pytest这是一个fixture
# def user_token():     # fixture 的名字  也是给测试函数的参数名
#     print('开始：用户登录')
#     token = 'abc123'
#     yield token      # 前面是准备 后面是清理，中间的token 会传给测试的函数
#     print('结束：用户退出')
#
# def test_profile(user_token):
#     print(f'使用token访问个人的资料{user_token}')
#
#
# def test_settings(user_token):
#     print(f"测试的设计页面{user_token}")



"""
yield 在上述中，我们使用 yield 来获取我们的返回值，为什么不用return
return：函数结束后，后面的代码不会执行  ----> 没有办法做清理
yield ； 暂停的函数，把 ”值“ 拿出来，等测试结束之后，急需的执行后面的代码  ---> 完美的支持清理

"""


"""
如果说，我们在测试的时候，每一次都需要做什么操作（配置环境） 我们可以使用autouse = True
"""

#
# @pytest.fixture(autouse=True)   #<---   自动应用 但是，拿不到token的值
# def user_token():     # fixture 的名字  也是给测试函数的参数名
#     print('开始：用户登录')
#     token = 'abc123'
#     yield token      # 前面是准备 后面是清理，中间的token 会传给测试的函数
#     print('结束：用户退出')
#
# def test_profile(user_token):   # 显式的声明
#     print(f'使用token访问个人的资料{user_token}')
#
#
# def test_settings(user_token):
#     print(f"测试的设计页面{user_token}")



"""
fixture的作用域（scope）:控制执行的频率
function（默认）：每个函数前/后执行      要在一个干净的环境中使用  
class :在每个测试的类前/后  
module: 每个测试文件的前/后
session:所有的测试只一次       全局登录，启动浏览器
"""


# TEMP_FILE_CONTENT = 'test data'
#
# @pytest.fixture(scope = 'function')   # scope = '关键字'
# def temp_file_path():
#     """
#     提供了一个临时文本的路径，内容是test data
#     作用域是function
#     自动清理测试结束后会删除文件
#     返回的是文件的路径
#     :return:
#     """
#     print('创建一个临时的文件')
#     filename = 'pytest_temp_file.txt'
#     # 创建临时的文件
#     with open(filename,'w',encoding='utf-8') as f:
#         f.write('test data')
#     yield filename   # 将这个返回值给到其他的函数进行调用
#     print('删除临时的文件')
#     os.remove(filename)  #删除
#
# def test_temp_path(temp_file_path):
#     with open(temp_file_path,encoding='utf-8') as f:
#         assert f.read() == TEMP_FILE_CONTENT


# @pytest.fixture(scope='session')
# def global_token():
#     print('全局登录（只执行一次）')
#     token = 'global_token'
#     yield  token
#     print('全局退出（所有的测试结束后执行）')
#
# def test_xxxx(global_token):
#     print('第二位')
